new_clip = gdk_region_rectangle (&r);
if (private->parent != NULL &&
- private->parent->window_type != GDK_WINDOW_ROOT &&
- /* For foreign children, don't remove local parents, as parent
- may not be mapped yet, and the non-native parents are not really
- enforced for it anyways. */
- private->window_type != GDK_WINDOW_FOREIGN)
+ private->parent->window_type != GDK_WINDOW_ROOT)
{
gdk_region_intersect (new_clip, private->parent->clip_region);
/* The shape may not have been set, as the clip region doesn't actually
change, so do it here manually */
- if (private->viewable)
- GDK_WINDOW_IMPL_GET_IFACE (private->impl)->shape_combine_region ((GdkWindow *)private, private->clip_region, 0, 0);
+ GDK_WINDOW_IMPL_GET_IFACE (private->impl)->shape_combine_region ((GdkWindow *)private, private->clip_region, 0, 0);
reparent_to_impl (private);
implicit_paint = impl_window->implicit_paint;
paint = g_new (GdkWindowPaint, 1);
- paint->region = gdk_window_get_visible_region ((GdkDrawable *)window);
- gdk_region_intersect (paint->region, region);
+ paint->region = gdk_region_copy (region);
paint->region_tag = new_region_tag ();
+ gdk_region_intersect (paint->region, private->clip_region_with_children);
gdk_region_get_clipbox (paint->region, &clip_box);
/* Convert to impl coords */
private->paint_stack = g_slist_delete_link (private->paint_stack,
private->paint_stack);
- if (!private->viewable)
- goto non_viewable;
-
gdk_region_get_clipbox (paint->region, &clip_box);
tmp_gc = _gdk_drawable_get_scratch_gc (window, FALSE);
/* Reset clip region of the cached GdkGC */
gdk_gc_set_clip_region (tmp_gc, NULL);
- non_viewable:
-
cairo_surface_destroy (paint->surface);
g_object_unref (paint->pixmap);
gdk_region_destroy (paint->region);
return tmp_pixmap;
}
-static GdkRegion*
-gdk_window_get_visible_region (GdkDrawable *drawable)
-{
- GdkWindowObject *private = (GdkWindowObject*) drawable;
-
- if (private->viewable)
- return gdk_region_copy (private->clip_region);
- else
- return gdk_region_new ();
-}
-
static GdkRegion*
gdk_window_get_clip_region (GdkDrawable *drawable)
{
GdkWindowObject *private = (GdkWindowObject *)drawable;
GdkRegion *result;
- result = gdk_window_get_visible_region (drawable);
+ result = gdk_region_copy (private->clip_region);
if (private->paint_stack)
{
return result;
}
+static GdkRegion*
+gdk_window_get_visible_region (GdkDrawable *drawable)
+{
+ GdkWindowObject *private = (GdkWindowObject*) drawable;
+
+ return gdk_region_copy (private->clip_region);
+}
+
static void
gdk_window_draw_drawable (GdkDrawable *drawable,
GdkGC *gc,
gdk_region_destroy (private->shape);
old_region = NULL;
- if (private->viewable)
+ if (GDK_WINDOW_IS_MAPPED (window))
old_region = gdk_region_copy (private->clip_region);
if (shape_region)